package pe.gob.osce.sirenas.svc;

import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import org.apache.log4j.Logger;

import pe.gob.osce.sirenas.dao.ComunicacionesDAOLocal;
import pe.gob.osce.sirenas.dao.ExperienciaLaboralDAOLocal;
import pe.gob.osce.sirenas.dao.FormacionAcademicaDAOLocal;
import pe.gob.osce.sirenas.dao.convert.AuditoriaConvert;
import pe.gob.osce.sirenas.dao.convert.ExperienciaLaboralConvert;
import pe.gob.osce.sirenas.dao.convert.FormacionAcademicaConvert;
import pe.gob.osce.sirenas.model.AuditoriaDTO;
import pe.gob.osce.sirenas.model.ExperienciaLaboralDTO;
import pe.gob.osce.sirenas.model.FormacionAcademicaDTO;
import pe.gob.osce.sirenas.model.NotificacionesDTO;
import pe.gob.osce.sirenas.model.jpa.Auditoria;
import pe.gob.osce.sirenas.model.jpa.Comunicaciones;
import pe.gob.osce.sirenas.model.jpa.ExperienciaLaboral;
import pe.gob.osce.sirenas.model.jpa.FormacionAcademica;
import pe.gob.osce.sirenas.model.jpa.rectificaciones.HistorialExperienciaLaboral;
import pe.gob.osce.sirenas.model.jpa.rectificaciones.HistorialFormacionAcademica;
import pe.gob.osce.sirenas.util.ConstanteEJB;


/**
 * Session Bean implementation class RegistrarFichaSecretarioService
 */
@Stateless(mappedName = "RegistrarFichaSecretarioService")
public class RegistrarFichaSecretarioServiceImpl implements RegistrarFichaSecretarioServiceLocal {
	final static Logger log = Logger.getLogger(RegistrarFichaSecretarioServiceImpl.class);

	private ResourceBundle propSirenas = ResourceBundle.getBundle(ConstanteEJB.PROPERTIES);
//	@EJB
//	private	EstudiosDAOLocal	estudiosDAOLocal;
//	
	@EJB
	private	ExperienciaLaboralDAOLocal	experienciaLaboralDAOLocal;
	
	@EJB
	private	FormacionAcademicaDAOLocal	formacionAcademicaDAOLocal;

	@EJB
	private RegistrarNotificacionServiceLocal registrarNotificacionService;
	
	@EJB
	private ComunicacionesDAOLocal comunicacionesDAOLocal;
//	@Override
//	public	FormacionAcademicaDTO guardarFormacionAcademica(FormacionAcademicaDTO estudiosDTO,AuditoriaDTO auditoriaDTO)
//			throws Exception {
//		FormacionAcademica	estudiosJPA=null;
//		Auditoria auditoriaJPA=null;
//		
//		try{
//			auditoriaJPA=AuditoriaConvert.createJPA(auditoriaDTO);
//			/* Insertar Solicitud */
//			//estudiosJPA= FormacionAcademicaConvert.createJPA(estudiosDTO,auditoriaJPA);
//			estudiosJPA= estudiosDAOLocal.insertar(estudiosJPA);
//			/* OBTENER ESTRUCTURA DE LO GUARDADO */
//			estudiosDTO= FormacionAcademicaConvert.createDTO(estudiosJPA);
//			
//		}  catch (Exception e) {
//			log.error(e.getMessage(), e);
//		}
//		return estudiosDTO;
//	}

	@Override
	public	List<FormacionAcademicaDTO> guardarListFormacionAcademica(List<FormacionAcademicaDTO> listFormacionAcademicaDTO,AuditoriaDTO auditoriaDTO,Long idPersona)
			throws Exception {
		List<FormacionAcademica>	listFormacionAcademicaJPA=null;
		List<FormacionAcademica>	listFormacionAcademicaHistorialJPA=null;
		List<HistorialFormacionAcademica>	listHistorialFormacionAcademicaJPA=null;
		Auditoria auditoriaJPA=null;
		
		FormacionAcademica historialFormacionAcademicaJPA=null;
						
		Boolean listHistorial= new Boolean(false);
		
		try{
			auditoriaJPA=AuditoriaConvert.createJPA(auditoriaDTO);
			/** Insertar Solicitud **/
			/** Consultando e insertando en la tabla Historial cuando es modificado y  el estado de la Ficha sea diferente de Estado Pendiente ***/
			listFormacionAcademicaHistorialJPA= new ArrayList<FormacionAcademica>();
			
			for (FormacionAcademicaDTO formacionAcademicaDTO : listFormacionAcademicaDTO) {
				historialFormacionAcademicaJPA= new FormacionAcademica();
				if(formacionAcademicaDTO.getIdEstadoFicha()!=6)
				{
					if(formacionAcademicaDTO.getIdModificado()!=0)
					{
						historialFormacionAcademicaJPA=formacionAcademicaDAOLocal.obtenerFormacionAcademica(formacionAcademicaDTO.getIdModificado());						
						listFormacionAcademicaHistorialJPA.add(historialFormacionAcademicaJPA);
					}
				}	
			}
			if(listFormacionAcademicaHistorialJPA!=null)
			{
				listHistorialFormacionAcademicaJPA=FormacionAcademicaConvert.createListHistorialFormAcademicaJPA(listFormacionAcademicaHistorialJPA, auditoriaJPA);
				for (HistorialFormacionAcademica historialFormAcademicaJPA : listHistorialFormacionAcademicaJPA) {
					listHistorial= formacionAcademicaDAOLocal.insertarHistorialFormacionGeneral(historialFormAcademicaJPA);
					/**Registro de la Notificacion a bandeja*/
					NotificacionesDTO notificacionesDTO=new NotificacionesDTO();
					notificacionesDTO.setIdFicha(historialFormAcademicaJPA.getIdFicha());
					notificacionesDTO.setDescAsunto(propSirenas.getString(ConstanteEJB.NOTIF_RECTIFICACION));
					notificacionesDTO.setDescDetalle(propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_RECTIFICACION)+" "+historialFormAcademicaJPA.NOMBRE_TABLA);
					notificacionesDTO.setIndLectura(false);
					
					registrarNotificacionService.registrarNotificacion(notificacionesDTO, auditoriaDTO);
					/**Implemetar metodo para sacar los correos de Comunicacione sd ela fichaArbitralDTO*/					
					List<Comunicaciones> correos= comunicacionesDAOLocal.consultarListaComunicacion(idPersona, Long.parseLong(propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICO)), Long.parseLong(propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICODOS)));
					String toEmail="";
					for (Comunicaciones comunicaciones : correos) {
						toEmail+=comunicaciones.getDescripcionDetalle()+ "  ";
					}
					//String toEmail="jcayulla@outlook.com";
					/**Registro de la Notificacion a Correo Electronico*/
					registrarNotificacionService.enviarCorreoNotificacion(toEmail, propSirenas.getString(ConstanteEJB.NOTIF_RECTIFICACION), propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_GRAL));
					
				}
			}
			/*** FIN de Metodos de Historial**/
			
			
			listFormacionAcademicaJPA=FormacionAcademicaConvert.createListFormAcademicaJPA(listFormacionAcademicaDTO, auditoriaJPA);
			for (FormacionAcademica formacionAcademica : listFormacionAcademicaJPA) {
			
				formacionAcademica= formacionAcademicaDAOLocal.insertar(formacionAcademica);
					
			}
			listFormacionAcademicaDTO=FormacionAcademicaConvert.createListFormAcademicaDTO(listFormacionAcademicaJPA);

			
		}  catch (Exception e) {
			log.error(e.getMessage(), e);
		}
		return listFormacionAcademicaDTO;
	}
	
	
	@Override
	public List<ExperienciaLaboralDTO> guardarExperienciaLaboral(	List<ExperienciaLaboralDTO> listaExperienciaLaboralDTO,AuditoriaDTO auditoriaDTO,Long idPersona) 
			throws Exception {
		ExperienciaLaboral experienciaLaboralJPA=null;
		ExperienciaLaboral experienciaLaboralConsul=null;
		List<ExperienciaLaboral> listExperienciaLaboralAlHistorialJPA=null;
		List<HistorialExperienciaLaboral> listHistorialExperienciaLaboralJPA=null;
		boolean confirmacion=false;
		Auditoria auditoriaJPA=null;
		
		try{
			auditoriaJPA=AuditoriaConvert.createJPA(auditoriaDTO);
			listExperienciaLaboralAlHistorialJPA= new ArrayList<ExperienciaLaboral>();
			for (ExperienciaLaboralDTO experienciaLaboralDTO : listaExperienciaLaboralDTO) {
				experienciaLaboralConsul=new ExperienciaLaboral();
				if(experienciaLaboralDTO.getIdEstadoFicha()!=6)
				{
					if(experienciaLaboralDTO.getIdModificado()!=0)
					{
						experienciaLaboralConsul=experienciaLaboralDAOLocal.consultarExperienciaLaboral(experienciaLaboralDTO.getIdModificado());
						listExperienciaLaboralAlHistorialJPA.add(experienciaLaboralConsul);
					}
				}
			}
			listHistorialExperienciaLaboralJPA=ExperienciaLaboralConvert.createListHistorialExperienciaLaboralJPA(listExperienciaLaboralAlHistorialJPA, auditoriaJPA);
			if(listHistorialExperienciaLaboralJPA!=null)
			{
				for (HistorialExperienciaLaboral historialExperienciaLaboral : listHistorialExperienciaLaboralJPA) {
					confirmacion=experienciaLaboralDAOLocal.insertarHistorialExperienciaLaboral(historialExperienciaLaboral);
					
						/**Registro de la Notificacion a bandeja*/
						NotificacionesDTO notificacionesDTO=new NotificacionesDTO();
						notificacionesDTO.setIdFicha(historialExperienciaLaboral.getIdFicha());
						notificacionesDTO.setDescAsunto(propSirenas.getString(ConstanteEJB.NOTIF_RECTIFICACION));
						notificacionesDTO.setDescDetalle(propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_RECTIFICACION)+" "+historialExperienciaLaboral.NOMBRE_TABLA);
						notificacionesDTO.setIndLectura(false);
						
						registrarNotificacionService.registrarNotificacion(notificacionesDTO, auditoriaDTO);
						/**Implemetar metodo para sacar los correos de Comunicacione sd ela fichaArbitralDTO*/					
						List<Comunicaciones> correos= comunicacionesDAOLocal.consultarListaComunicacion(idPersona, Long.parseLong(propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICO)), Long.parseLong(propSirenas.getString(ConstanteEJB.ID_CORREOELECTRONICODOS)));
						String toEmail="";
						for (Comunicaciones comunicaciones : correos) {
							toEmail+=comunicaciones.getDescripcionDetalle()+ "  ";
						}
						//String toEmail="jcayulla@outlook.com";
						/**Registro de la Notificacion a Correo Electronico*/
						registrarNotificacionService.enviarCorreoNotificacion(toEmail, propSirenas.getString(ConstanteEJB.NOTIF_RECTIFICACION), propSirenas.getString(ConstanteEJB.NOTIF_DETALLE_GRAL));
					
				}
			}			
			
			for (ExperienciaLaboralDTO experienciaLaboralDTO : listaExperienciaLaboralDTO) {
				/* Insertar Experiencia Laboral */
				experienciaLaboralJPA= ExperienciaLaboralConvert.createJPA(experienciaLaboralDTO,auditoriaJPA);
				experienciaLaboralJPA= experienciaLaboralDAOLocal.insertar(experienciaLaboralJPA);
				/* OBTENER ESTRUCTURA DE LO GUARDADO */
				//experienciaLaboralDTO= ExperienciaLaboralConvert.createDTO(experienciaLaboralJPA);
			}
			
		}  catch (Exception e) {
			log.error(e.getMessage(), e);
		}
		return listaExperienciaLaboralDTO;		
		
	}
	

}
